package com.ytjj.quartz.task;

import com.ytjj.common.constants.SysConfigConstants;
import com.ytjj.qmyx.mall.mapper.PayConfigMapper;
import com.ytjj.qmyx.mall.mapper.SysConfigMapper;
import com.ytjj.qmyx.mall.model.PayConfig;
import com.ytjj.qmyx.mall.model.PayConfigExample;
import com.ytjj.qmyx.mall.model.SysConfig;
import com.ytjj.qmyx.mall.model.SysConfigExample;
import com.ytjj.quartz.model.AccessToken;
import com.ytjj.quartz.model.JsapiTicket;
import com.ytjj.quartz.utils.WeixinCommenUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import java.util.Date;
import java.util.List;

/**
 * 微信定时任务
 *
 *
 * @version 1.0
 *
 */
@Component
@Slf4j
public class WeixinTask {

    @Autowired
    private WeixinCommenUtil weixinCommenUtil;

    @Resource
    private SysConfigMapper sysConfigMapper;

    @Value("${spring.profiles.active}")
    private String profiles;

    @Resource
    private PayConfigMapper payConfigMapper;

//    /**
//     * 每30分钟刷新一次公众号 token
//     */
//    @Scheduled(cron = "0 0/30 * * * ?")
//    public void getWeixinH5AccessToken() {
//        try {
//            log.info("开始刷新公众号token");
//            PayConfigExample example = new PayConfigExample();
//            example.createCriteria()
//                    .andTradeTypeEqualTo("JSAPI")
//                    .andTypeEqualTo("H5");
//            List<PayConfig> payConfigs = payConfigMapper.selectByExample(example);
//            for(PayConfig payConfig : payConfigs){
//                if(StringUtils.isBlank(payConfig.getSubAppSecret())){
//                    continue;
//                }
//                AccessToken accessToken=weixinCommenUtil.getToken(payConfig.getSubAppId(), payConfig.getSubAppSecret());
//                if(null==accessToken){
//                    continue;
//                }
//                String token = accessToken.getAccess_token();
//                payConfig.setToken(token);
//                payConfigMapper.updateByPrimaryKeySelective(payConfig);
//                //更新系统配置表
//                SysConfig sysConfig = new SysConfig();
//                sysConfig.setParamValue(token);
//                sysConfig.setUpdateTime(new Date());
//                SysConfigExample sysConfigExample = new SysConfigExample();
//                if("guobao".equalsIgnoreCase(payConfig.getCompany())) {
//                    sysConfigExample.createCriteria()
//                            .andParamKeyEqualTo(SysConfigConstants.WX_H5_TOKEN);
//                }else{
//                    sysConfigExample.createCriteria()
//                            .andParamKeyEqualTo(SysConfigConstants.WX_H5_TOKEN_TXG);
//                }
//                sysConfigMapper.updateByExampleSelective(sysConfig, sysConfigExample);
//            }
//            log.info("结束刷新公众号token");
//        } catch (Exception e) {
//            log.error("获取微信公众号access_toke出错，信息如下");
//            e.printStackTrace();
//        }
//    }
//    @Scheduled(cron = "0 0/30 * * * ?")
//    public void getWeixinAppAccessToken() {
//        try {
//            log.info("开始刷新app token");
//            PayConfigExample example = new PayConfigExample();
//            example.createCriteria()
//                    .andTradeTypeEqualTo("APP")
//                    .andTypeEqualTo("APP");
//            List<PayConfig> payConfigs = payConfigMapper.selectByExample(example);
//            for(PayConfig payConfig : payConfigs) {
//                if(StringUtils.isBlank(payConfig.getSubAppSecret())){
//                    continue;
//                }
//                AccessToken accessToken=weixinCommenUtil.getToken(payConfig.getSubAppId(), payConfig.getSubAppSecret());
//                if(null==accessToken){
//                    continue;
//                }
//                String token = accessToken.getAccess_token();
//                payConfig.setToken(token);
//                payConfigMapper.updateByPrimaryKeySelective(payConfig);
//                //更新系统配置表
//                SysConfig sysConfig = new SysConfig();
//                sysConfig.setParamValue(token);
//                sysConfig.setUpdateTime(new Date());
//                SysConfigExample sysConfigExample = new SysConfigExample();
//                if("guobao".equalsIgnoreCase(payConfig.getCompany())) {
//                    sysConfigExample.createCriteria()
//                            .andParamKeyEqualTo(SysConfigConstants.WX_APP_TOKEN);
//                }else{
//                    sysConfigExample.createCriteria()
//                            .andParamKeyEqualTo(SysConfigConstants.WX_APP_TOKEN_TXG);
//                }
//                sysConfigMapper.updateByExampleSelective(sysConfig, sysConfigExample);
//            }
//            log.info("结束刷新APP token");
//        } catch (Exception e) {
//            log.error("获取微信APP access_toke出错，信息如下");
//            e.printStackTrace();
//        }
//    }

//    /**
//     * 每30分钟刷新一次公众号 ticket
//     */
//    @Scheduled(cron = "0 0/30 * * * ?")
//    public void getWeixinH5Ticket() {
//        try {
//            log.info("开始刷新公众号ticket");
//            PayConfigExample example = new PayConfigExample();
//            example.createCriteria()
//                    .andTradeTypeEqualTo("JSAPI")
//                    .andTypeEqualTo("H5");
//            List<PayConfig> payConfigs = payConfigMapper.selectByExample(example);
//            for(PayConfig payConfig : payConfigs){
//                if(StringUtils.isBlank(payConfig.getToken())){
//                    continue;
//                }
//                JsapiTicket jsapiTicket=weixinCommenUtil.getJsapiTicket(payConfig.getToken());
//                if(jsapiTicket!=null) {
//                    String ticket = jsapiTicket.getTicket();
//                    payConfig.setTicket(ticket);
//                    payConfigMapper.updateByPrimaryKeySelective(payConfig);
//                }
//            }
//            log.info("结束刷新公众号ticket");
//        } catch (Exception e) {
//            log.error("获取微信公众号ticket出错，信息如下");
//            e.printStackTrace();
//        }
//    }

    /**
     * 每30分钟刷新一次小程序 token
     */
    @Scheduled(cron = "0 0/30 * * * ?")
    public void getWeixinJSAPIAccessToken() {
        try {
            log.info("开始刷新小程序token");
            PayConfigExample example = new PayConfigExample();
            example.createCriteria()
                    .andTradeTypeEqualTo("JSAPI")
                    .andTypeEqualTo("APP");
            List<PayConfig> payConfigs = payConfigMapper.selectByExample(example);
            for(PayConfig payConfig : payConfigs){
                if(StringUtils.isBlank(payConfig.getSecret())){
                    continue;
                }
                AccessToken accessToken=weixinCommenUtil.getToken(payConfig.getSubAppId(), payConfig.getSecret());
                if(null==accessToken){
                    continue;
                }
                String token = accessToken.getAccess_token();
                payConfig.setToken(token);
                payConfig.setUpdateTime(new Date());
                payConfigMapper.updateByPrimaryKeySelective(payConfig);
                //更新系统配置表
                SysConfig sysConfig = new SysConfig();
                sysConfig.setParamValue(token);
                sysConfig.setUpdateTime(new Date());
                SysConfigExample sysConfigExample = new SysConfigExample();
                sysConfigExample.createCriteria().andParamKeyEqualTo(SysConfigConstants.WX_TOKEN);
                sysConfigMapper.updateByExampleSelective(sysConfig, sysConfigExample);
            }
            log.info("结束刷新小程序token");
        } catch (Exception e) {
            log.error("获取微信小程序access_toke出错，信息如下");
            e.printStackTrace();
        }
    }

//    /**
//     * 每30分钟刷新一次小程序 ticket
//     */
//    @Scheduled(cron = "0 0/30 * * * ?")
//    public void getWeixinJSAPITicket() {
//        try {
//            log.info("开始刷新小程序ticket");
//            PayConfigExample example = new PayConfigExample();
//            example.createCriteria()
//                    .andTradeTypeEqualTo("JSAPI")
//                    .andTypeEqualTo("APP");
//            List<PayConfig> payConfigs = payConfigMapper.selectByExample(example);
//            for(PayConfig payConfig : payConfigs){
//                if(StringUtils.isBlank(payConfig.getToken())){
//                    continue;
//                }
//                JsapiTicket jsapiTicket=weixinCommenUtil.getJsapiTicket(payConfig.getToken());
//                if(jsapiTicket!=null) {
//                    String ticket = jsapiTicket.getTicket();
//                    payConfig.setTicket(ticket);
//                    payConfigMapper.updateByPrimaryKeySelective(payConfig);
//                }
//            }
//            log.info("结束刷新小程序ticket");
//        } catch (Exception e) {
//            log.error("获取微信小程序ticket出错，信息如下");
//            e.printStackTrace();
//        }
//    }
}
